using SG3L_RAG.Domain.Entities;

namespace SG3L_RAG.Application.Interfaces
{
    public interface IDocumentService
    {
        Task<Document?> GetByIdAsync(Guid id);
        Task<IEnumerable<Document>> GetAllAsync();
        Task<Document> CreateAsync(string name, string type, Guid uploaderId, string status, string permission);
        Task UpdateAsync(Document document);
        Task DeleteAsync(Guid id);
        Task<IEnumerable<Document>> GetByUploaderIdAsync(Guid uploaderId);
        Task<IEnumerable<Document>> GetByTypeAsync(string type);
        Task<IEnumerable<Document>> GetByStatusAsync(string status);
        Task<IEnumerable<Document>> SearchByTitleAsync(string title);
        Task<IEnumerable<Document>> GetPublicDocumentsAsync();
        Task ProcessDocumentAsync(Guid documentId);
        Task<List<Document>> BatchCreateAsync(List<(string name, string type, Guid uploaderId, string status, string permission)> docs);
        Task SetPermissionAsync(Guid documentId, string permission);
        Task SetStatusAsync(Guid documentId, string status);
    }
}
